/-app
/-app/layout
AssemblyNode.html
NamespaceNode.html
TypeNode.html
app.html
pe.css
pefile.html
/-app/tree
AssemblyNode.ts
MethodNode.ts
NamespaceNode.ts
PropertyNode.ts
TypeNode.ts
Application.ts
earlyinit.js
format.ts
lateinit.js
sampleData.d.ts
sampleData.js
/-core
/-headers
/-imports
/-io
/-managed ...
/-managed/metadata ...
/-managed/metadata/enums
-enums.ts
AssemblyHashAlgorithm.ts
ClrImageFlags.ts
ClrMetadataSignature.ts
TableKind.ts
ClrDirectory.ts
ClrMetadata.ts
CodedIndexReader.ts
MetadataStreams.ts
TableCompletionReader.ts
TableReader.ts
TableStream.ts
bits.ts
/-managed/tables
Assembly.ts
AssemblyOS.ts
AssemblyProcessor.ts
AssemblyRef.ts
AssemblyRefOS.ts
AssemblyRefProcessor.ts
ClassLayout.ts
Constant.ts
CustomAttribute.ts
DeclSecurity.ts
Event.ts
EventMap.ts
ExportedType.ts
Field.ts
FieldLayout.ts
FieldMarshal.ts
FieldRva.ts
File.ts
GenericParam.ts
GenericParamConstraint.ts
ImplMap.ts
InterfaceImpl.ts
ManfiestResource.ts
MemberRef.ts
MethodDef.ts
MethodImpl.ts
MethodSemantics.ts
MethodSpec.ts
Module.ts
ModuleRef.ts
NestedClass.ts
Param.ts
Property.ts
PropertyMap.ts
StandaloneSig.ts
TypeDef.ts
TypeRef.ts
TypeSpec.ts
AppDomain.ts
Assembly.ts
ConstructedGenericType.ts
EventInfo.ts
FieldInfo.ts
MethodInfo.ts
ParameterInfo.ts
PropertyInfo.ts
Type.ts
TypeReference.ts
/-typings
/-unmanaged
pe.html
pe.ts
1
module pe.managed.metadata {
2
 
3
  export class TableCompletionReader {
4
    constructor(private _tableStream: TableStream, private _metadataStreams: MetadataStreams) {
5
 
6
      this.lookupResolutionScope = this._createLookup(TableReader.resolutionScopeTables);
7
      this.lookupTypeDefOrRef = this._createLookup(TableReader.typeDefOrRefTables);
8
    
9
    }
10
 
11
    readString(index: number): string {
12
      return this._tableStream.stringIndices[index];
13
    }
14
 
15
    readGuid(index: number): string {
16
      return this._metadataStreams.guids[index];
17
    }
18
 
19
    copyFieldRange(fields: FieldInfo[], start: number, end?: number) {
20
      var table = this._tableStream.tables[0x04];
21
 
22
      if (!end && typeof (end) === "undefined")
23
        end = table.length;
24
 
25
      for (var i = start; i < end; i++) {
26
        var fieldRow = table[i];
27
        fields.push(fieldRow.def);
28
      }
29
    }
30
 
31
    copyMethodRange(methods: MethodInfo[], start: number, end?: number) {
32
      var table = this._tableStream.tables[0x06]; // MethodDef
33
 
34
      if (!end && typeof (end) === "undefined")
35
        end = table.length;
36
 
37
      for (var i = start; i < end; i++) {
38
        var methodRow = table[i];
39
        methods.push(methodRow.def);
40
      }
41
    }
42
 
43
    copyParamRange(parameters: ParameterInfo[], start: number, end: number) { 
44
      var table = this._tableStream.tables[metadata.TableKind.ParameterDefinition];
45
 
46
      if (!end && end===null)
47
        end = table.length;
48
 
49
      for (var i = start; i < end; i++) {
50
        var parameterRow = table[i];
51
        parameters.push(parameterRow.def);
52
      }
53
    }
54
 
55
 
56
    lookupResolutionScope: (codedIndex: number) => any;
57
 
58
    lookupTypeDefOrRef: (codedIndex: number) => TypeReference;
59
 
60
    private _createLookup(tables: number[]): (codedIndex: number) => any {
61
      var tableKindBitCount = calcRequredBitCount(tables.length);
62
 
63
      return (codedIndex: number) => {
64
        var rowIndex = codedIndex >> tableKindBitCount;
65
        if (rowIndex === 0)
66
          return null;
67
 
68
        var tableKind = codedIndex - (rowIndex << tableKindBitCount);
69
 
70
        var table: any[] = this._tableStream.tables[tableKind];
71
        var row = table[rowIndex];
72
 
73
        var result = row.def;
74
 
75
        return result;
76
      };
77
    }
78
 
79
    resolveTypeReference(resolutionScope: any, namespace: string, name: string): Type {
80
      return null;
81
    }
82
 
83
    readFieldSignature(field: FieldInfo, blobIndex: number) {
84
    }
85
  }
86
 
87
}